উদাহরণ সহ Client-Side Load Balancing

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Client-Side Load Balancing |
70
70

Client-side load balancing হলো এমন একটি পদ্ধতি, যেখানে ক্লায়েন্ট অ্যাপ্লিকেশন সার্ভিস ইন্সট্যান্সগুলোর তালিকা পায় এবং নিজে থেকেই সার্ভিস ইন্সট্যান্স নির্বাচন করে। Spring Boot-এ Spring Cloud LoadBalancer এবং Ribbon (ডিপ্রিকেটেড) ব্যবহার করে ক্লায়েন্ট-সাইড লোড ব্যালেন্সিং সেটআপ করা যায়।


Spring Cloud LoadBalancer ব্যবহার (প্রস্তাবিত পদ্ধতি)

Spring Cloud LoadBalancer কী?

Spring Cloud LoadBalancer হলো একটি ক্লায়েন্ট-সাইড লোড ব্যালেন্সার, যা API কল করার সময় বিভিন্ন সার্ভিস ইন্সট্যান্সের মধ্যে লোড ভাগাভাগি করে।


Client-Side Load Balancing সেটআপ করার ধাপ

১. ডিপেন্ডেন্সি যোগ করা

Spring Cloud LoadBalancer ব্যবহার করতে, আপনার pom.xml বা build.gradle-এ নিচের ডিপেন্ডেন্সি যোগ করুন:

Maven:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'

২. application.yml কনফিগার করা

সার্ভিস ইন্সট্যান্সগুলোর তালিকা কনফিগার করুন। উদাহরণস্বরূপ, যদি আপনার order-service নামে একটি সার্ভিস থাকে:

spring:
  cloud:
    discovery:
      client:
        simple:
          instances:
            order-service:
              - uri: http://localhost:8081
              - uri: http://localhost:8082
              - uri: http://localhost:8083

৩. WebClient-এ Load Balancer ইন্টিগ্রেশন

Spring Cloud LoadBalancer ব্যবহার করতে WebClient-এ সরাসরি ইন্টিগ্রেশন করা যায়।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

৪. API কলের উদাহরণ

Spring Cloud LoadBalancer-কে @LoadBalanced দিয়ে নির্দেশ করতে হয় যে এটি লোড ব্যালেন্সিং করতে হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

@Service
public class OrderServiceClient {

    private final WebClient.Builder webClientBuilder;

    @Autowired
    public OrderServiceClient(WebClient.Builder webClientBuilder) {
        this.webClientBuilder = webClientBuilder;
    }

    public String fetchOrderDetails() {
        return webClientBuilder.build()
                .get()
                .uri("http://order-service/orders") // সার্ভিস নাম ব্যবহার করুন
                .retrieve()
                .bodyToMono(String.class)
                .block();
    }
}

Ribbon ব্যবহার (ডিপ্রিকেটেড)

১. ডিপেন্ডেন্সি যোগ করা

Ribbon ব্যবহার করতে, নিচের ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

২. application.yml কনফিগার করা

Ribbon সার্ভিস ইন্সট্যান্সের তালিকা থেকে সার্ভিস লোড ব্যালেন্স করবে:

order-service:
  ribbon:
    listOfServers: localhost:8081,localhost:8082,localhost:8083

৩. RestTemplate ব্যবহার

Ribbon-এ লোড ব্যালেন্সিং করতে @LoadBalanced অ্যানোটেশন ব্যবহার করুন।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

৪. API কলের উদাহরণ

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderServiceClient {

    private final RestTemplate restTemplate;

    @Autowired
    public OrderServiceClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String fetchOrderDetails() {
        return restTemplate.getForObject("http://order-service/orders", String.class);
    }
}

Custom Load Balancer Strategy

Spring Cloud LoadBalancer-এ আপনি কাস্টম লোড ব্যালেন্সিং স্ট্র্যাটেজি ব্যবহার করতে পারেন।

উদাহরণ: কাস্টম স্ট্র্যাটেজি

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LoadBalancerConfig {

    @Bean
    public ReactorServiceInstanceLoadBalancer customLoadBalancer(ServiceInstanceListSupplier supplier) {
        return new RandomLoadBalancer(supplier, "order-service"); // Random Load Balancing
    }
}

Client-Side Load Balancing ও Discovery Service ইন্টিগ্রেশন

Spring Cloud LoadBalancer ইন্টিগ্রেশন Eureka বা অন্য Discovery সার্ভিসের সাথেও করা যায়।

Eureka Client-সাথে ইন্টিগ্রেশন:

pom.xml-এ ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

উপসংহার

  1. Spring Cloud LoadBalancer:
    আধুনিক Spring Boot অ্যাপ্লিকেশনের জন্য সবচেয়ে উপযুক্ত।
  2. Ribbon (Deprecated):
    পূর্বে ব্যবহৃত ক্লায়েন্ট-সাইড লোড ব্যালেন্সার। নতুন প্রকল্পে ব্যবহার না করার পরামর্শ।
  3. Custom Strategy:
    বিশেষ ক্ষেত্রে কাস্টম লোড ব্যালান্সিং পদ্ধতি সেটআপ করা সম্ভব।

উপরোক্ত কৌশলগুলো ব্যবহার করে আপনি একটি রিলায়েবল ক্লায়েন্ট-সাইড লোড ব্যালান্সিং মেকানিজম ইমপ্লিমেন্ট করতে পারবেন।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion